package com.education.ai.dao;

import com.education.ai.entity.Class;
import com.education.ai.entity.ClassVO;

import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 班级数据访问接口
 */
public interface ClassDao {
    
    /**
     * 查询所有班级
     */
    List<Class> findAll();
    
    /**
     * 根据ID查询班级
     */
    Optional<Class> findById(Long id);
    
    /**
     * 根据班级名称查询班级
     */
    Optional<Class> findByClassName(String className);
    
    /**
     * 根据年级查询班级列表
     */
    List<Class> findByGrade(String grade);
    
    /**
     * 根据班级名称模糊查询
     */
    List<Class> findByClassNameContaining(String classNamePart);
    
    /**
     * 保存班级
     */
    Class save(Class clazz);
    
    /**
     * 更新班级
     */
    boolean update(Class clazz);
    
    /**
     * 删除班级
     */
    boolean deleteById(Long id);
    
    /**
     * 查询班级总数
     */
    long count();
    
    /**
     * 查询教师所教授的班级列表
     * @param teacherId 教师ID
     * @return 班级列表
     */
    List<ClassVO> getTeacherClasses(String teacherId);
    
    /**
     * 根据班级ID查询学生列表（带分页）
     * @param classId 班级ID
     * @param offset 偏移量
     * @param limit 每页大小
     * @return 学生列表
     */
    List<Map<String, Object>> getStudentsByClassId(Long classId, int offset, int limit);
    
    /**
     * 计算班级学生总数
     * @param classId 班级ID
     * @return 学生总数
     */
    int countStudentsByClassId(Long classId);
} 